/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.uc.service;

import com.xy.biz.uc.domain.bo.TeamBO;
import com.xy.biz.uc.domain.bo.TeamUserRelBO;
import com.xy.biz.uc.domain.query.TeamQuery;
import com.xy.biz.uc.domain.req.*;
import com.xy.biz.uc.domain.resp.GetTeamResponse;
import com.xy.lang.domain.Result;

import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 *
 *
 * @author yzh
 * @date 2021-4-26
 */
public interface TeamService {

	/**
	 * 保存
	 *
	 * @param request
	 */
	Result<?> saveTeam(SaveTeamRequest request);

	/**
	 * 更新
	 *
	 * @param request
	 */
	Result<?> updateTeam(SaveTeamRequest request);

	/**
	 * 删除
	 *
	 * @param teamId
	 */
	Result<?> deleteTeam(Long teamId);

	/**
	 * 查找一个
	 *
	 * @param teamId
	 * @return
	 */
	TeamBO getTeam(Long teamId);

	/**
	 * 查找多个
	 *
	 * @param collection 标识集合
	 */
	List<TeamBO> listTeamById(Collection<Long> collection);

	/**
	 * 查找多个
	 *
	 * @param query 查找条件
	 */
	List<TeamBO> listTeam(TeamQuery query);

	/**
	 * 统计个数
	 *
	 * @param query 查找条件
	 */
	int countTeam(TeamQuery query);

	/**
	 *
	 * @return
	 */
	List<GetTeamResponse> listJoinedTeam(ListTeamRequest request);

	/**
	 * 邀请成员加入
	 * @param request
	 * @return
	 */
	Result<?> inviteJoin(SaveTeamUserRelRequest request);

	/**
	 * 修改团队用户身份
	 * @param request
	 * @return
	 */
	Result<?> updateTeamUserRole(UpdateTeamUserRelRequest request);

	/**
	 * 删除团队成员
	 * @param request
	 * @return
	 */
	Result<?> deletedTeamUserRole(DeleteTeamUserRelRequest request);

	/**
	 * 团队成员列表
	 * @param request
	 * @return
	 */
	List<TeamUserRelBO> listTeamUser(ListTeamUserRelRequest request);

	/**
	 * 当前用户是否是团队管理员
	 *
	 * @param teamId
	 * @return
	 */
	Result<Boolean> isTeamAdmin(Long teamId);

	/**
	 * 当前用户是否是团队管理员
	 *
	 * @param teamIds
	 * @return
	 */
	Result<Set<Long>> isTeamAdminS(Collection<Long> teamIds);

}
